//package org.jupiter.blog.authentic.service;
//
//import org.jupiter.blog.service.service.AuthenticService;
//import org.jupiter.blog.service.domain.user.JupiterUser;
//import org.jupiter.blog.service.repository.UserRepository;
//import org.jupiter.blog.service.util.PasswordEncryptUtil;
//import org.jupiter.blog.service.util.TokenUtil;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import redis.clients.jedis.Jedis;
//
//import java.util.Optional;
//
//@Service
//public class AuthenticServiceImpl implements AuthenticService {
//
//	@Autowired
//	private UserRepository userRepository;
//
//	@Autowired
//	private Jedis redisClient;
//
//	@Autowired
//	private TokenUtil tokenUtil;
//
//	private static final String REDIS_TOKEN_PREFIX = "LOGIN_TOKEN:";
//
//	/**
//	 * 登录：校验账号密码 -> 生成JWT -> 存入redis（方便强制下线）
//	 */
//	@Override
//	public String login(String username, String encryptedPasswordFromFront) {
//		// 1. 数据库中查找用户
//		Optional<JupiterUser> optionalUser = userRepository.findByUsername(username);
//		if (optionalUser.isEmpty()){
//			throw new RuntimeException("用户不存在");
//		}
//		JupiterUser user = optionalUser.get();
//
//		// 2. 前端密码先用RSA解密，再用后端的加密算法加密后比对
//		String plainPassword = PasswordEncryptUtil.rsaDecrypt(encryptedPasswordFromFront);
//		String encryptedPassword = PasswordEncryptUtil.dbEncrypt(plainPassword);
//
//		if (!encryptedPassword.equals(user.getPassword())){
//			throw new RuntimeException("密码错误");
//		}
//
//		// 3. 生成JWT
//		String token = tokenUtil.generateToken(user.getUuid());
//
//		// 4. 存 Redis，设置过期时间与JWT一致
//		redisClient.setex(REDIS_TOKEN_PREFIX + user.getUuid(), 3600, token);
//
//		return token;
//	}
//
//	/**
//	 * 退出：删除redis中的token
//	 */
//	@Override
//	public void logout(String userUuid) {
//		redisClient.del(REDIS_TOKEN_PREFIX + userUuid);
//	}
//
//	/**
//	 * 强制踢下线：管理员调用，删除redis中的token
//	 */
//	@Override
//	public void forceLogout(String userUuid) {
//		redisClient.del(REDIS_TOKEN_PREFIX + userUuid);
//	}
//
//	/**
//	 * 校验token是否有效（JWT + Redis双重校验）
//	 */
//	public boolean validateToken(String token) {
//		if (!tokenUtil.validateToken(token)){
//			return false;
//		}
//		String userUuid = tokenUtil.getUserUuidFromToken(token);
//		String redisToken = redisClient.get(REDIS_TOKEN_PREFIX + userUuid);
//		return token.equals(redisToken);
//	}
//}
